package com.itheima.多态;
/*
多态:三个条件
1.继承/实现关系
2.方法的重写
3.父类引用指向子类对象/接口引用指向实现类对象
 */
public class Demo1 {
    public static void main(String[] args) {
        AnimalOperator.useAnimal(new Cat());
        AnimalOperator.useAnimal(new Dog());
        AnimalOperator.useAnimal(new Pig());


        //多态类型转化
        //左子右父:强制类型转换
        Animal a = AnimalOperator.getAnimal(new Dog());
        //System.out.println(a.name);
        //强制类型转换存在风险,可以使用instanceof进行判断,当返回值为true,则进行强转
        if(a instanceof Cat){
            Dog d = (Dog)a ;
        d.lookHome();}
/*
类型转换:
左父右子:父类引用指向子类对象/接口引用指向实现类对象:自动类型转换
多态弊端:父类引用仅能调用在父类中已经声明的方法,子类中独有的方法无法调用
 */
        Animal animal = new Cat();
        Cat cat =(Cat) animal;
        cat.eat();

    }



}
